Current File : /var/www/e360ban/wp-content/plugins/wp-views/res/js/redesign/views_parametric.js
/**
 * Views Custom Search Backend Script
 *
 * @package Views
 *
 * @since 2.4.0
 *
 * @todo Generate a set of visual feedback items when AJAX calls are run to create the associated query filters,
 *       as some of the requested AJAX are async
 */

var WPViews		= WPViews || {};

if ( typeof WPViews.ShortcodesParser_instance === 'undefined' ) {
	WPViews.ShortcodesParser_instance = {};
}

if ( typeof WPViews.ParametricButtons === 'undefined' ) {
	WPViews.ParametricButtons = {};
}

WPViews.ParametricSearchFilters = function( $, id ) {
	const self										= this;

	self.view_id									= id || $( '.js-post_ID' ).val();

	self.cache										= {
		meta_fields: {
			postmeta: false,
			termmeta: false,
			usermeta: false,
		},
	};

	self.parametric_search_select_dialog			= null;
	self.dialog_minWidth							= 870;

	self.calculate_dialog_maxWidth					= function() {
		return ( $( window ).width() - 200 );
	};

	self.calculate_dialog_maxHeight					= function() {
		return ( $( window ).height() - 100 );
	};

	self.overlayContainer = $( '<div class=\'wpv-setting-overlay js-wpv-filter-editor-overlay\' style=\'top:0;\'><div class=\'wpv-transparency\'></div><i class=\'icon-lock fa fa-lock\'></i></div>' );

	self.parametric_search_select_dialog_loading	= $(
		'<div style="min-height: 150px;">' +
		'<div style="position: absolute; top: 50%; left: 50%; transform: translate(-50%, -50%); text-align: center; ">' +
		'<div class="wpv-spinner ajax-loader"></div>' +
		'<p>' + wpv_parametric_i18n.dialogs.loading + '</p>' +
		'</div>' +
		'</div>'
	);

	self.set_view_id = function ( view_id ) {
		self.view_id = view_id || $( '.js-post_ID' ).val();
	};

	self.init_dialogs = function() {
		$( 'body' ).append( '<div id="js-wpv-parametric-search-select-dialog" class="toolset-shortcode-gui-dialog-container wpv-shortcode-gui-dialog-container"></div>' );
		self.parametric_search_select_dialog = $( '#js-wpv-parametric-search-select-dialog' ).dialog( {
			autoOpen:	false,
			modal:	true,
			title:	wpv_parametric_i18n.dialogs.dialog_select.title,
			minWidth:	self.calculate_dialog_maxWidth(),
			maxHeight:	self.calculate_dialog_maxHeight(),
			draggable:	false,
			resizable:	false,
			position:	{
				my:	'center top+50',
				at:	'center top',
				of:	window,
				collision:	'none',
			},
			show:	{
				effect:	'blind',
				duration:	800,
			},
			open:	function( event, ui ) {
				$( 'body' ).addClass( 'modal-open' );
				Toolset.hooks.doAction( 'wpv-action-wpv-shortcodes-gui-set-gui-action', 'insert' );
			},
			close:	function( event, ui ) {
				$( 'body' ).removeClass( 'modal-open' );
			},
		} );
		return self;
	};

	// ---------------------------------
	// Parametric search buttons
	// ---------------------------------

	$( document ).on( 'click', '.js-wpv-parametric-search-filter-create', function() {
		const thiz		= $( this ),
			editor			= thiz.data( 'editor' );

		window.wpcfActiveEditor = editor;

		data = {
			action:	'wpv_parametric_search_filter_create_dialog',
			id:	Toolset.hooks.applyFilters( 'wpv-filter-wpv-edit-screen-get-id', '' ),
			wpnonce:	'whatever',
		};

		self.parametric_search_select_dialog
			.dialog( 'open' )
			.dialog( {
				width:	self.calculate_dialog_maxWidth(),
				maxWidth:	self.calculate_dialog_maxWidth(),
			} );
		self.parametric_search_select_dialog.html( self.parametric_search_select_dialog_loading );
		$.ajax( {
			url:	ajaxurl,
			data:	data,
			type:	'GET',
			dataType:	'json',
			success:	function( response ) {
				if ( response.success ) {
					$( 'body' ).addClass( 'modal-open' );
					self.parametric_search_select_dialog.html( response.data.dialog );
				}
			},
		} );
	} );

	$( document ).on( 'click', '.js-wpv-parametric-search-filter-item-dialog', function() {
		self.parametric_search_select_dialog.dialog( 'close' );
	} );

	$( document ).on( 'js_event_wpv_shortcode_gui_dialog_triggered', function( event, $data ) {
		if ( ! _.has( $data, 'shortcode' ) ) {
			return;
		}
		var shortcode_name = $data.shortcode;

		if ( _.indexOf( wpv_parametric_i18n.form_filters_shortcodes, shortcode_name ) != -1 ) {
			self.parametric_search_select_dialog.dialog( 'close' );
		}
	});

	// Maybe put this on a quicktag button?
	$( document ).on( 'click', '.js-wpv-parametric-search-filter-edit', function() {
		const thiz		= $( this ),
			editor			= thiz.data( 'editor' );

		Toolset.hooks.doAction( 'wpv-action-wpv-shortcodes-gui-maybe-edit-shortcode', editor );
	} );

	/** @var bool */
	self.refreshQueryFiltersOnFilterEditorSave = false;

	$( document ).on( 'js_event_wpv_shortcode_action_completed', function( event, shortcode_data ) {
		const shortcode_name = shortcode_data.name,
			shortcode_atts = shortcode_data.attributes,
			shortcode_raw_atts = shortcode_data.raw_attributes,
			shortcode_content = shortcode_data.content,
			shortcode_string = shortcode_data.shortcode;
		if ( _.indexOf( wpv_parametric_i18n.form_filters_shortcodes_with_define_callback, shortcode_name ) != -1 ) {
			// Those search filters require a companion query filter to be created.
			// We need to generate or update the query filter associated to this
			const data = {
				action:	'wpv_custom_search_define_query_filter',
				id:	Toolset.hooks.applyFilters( 'wpv-current-view-id', self.view_id ),
				shortcode:	shortcode_name,
				attributes:	shortcode_atts,
				attributes_raw: shortcode_raw_atts,
				//wpnonce:		wpv_editor_strings.screen_options.nonce
			};
			$.ajax( {
				type:	'POST',
				dataType: 'json',
				async:	false, // Block any other interaction until this is completed
				url:	ajaxurl,
				data:	data,
				success:	function( response ) {
					if ( response.success ) {
						Toolset.hooks.doAction( 'wpv-action-wpv-edit-screen-update-query-filter-list' );
						self.refreshQueryFiltersOnFilterEditorSave = true;
					}
				},
				error:	function( ajaxContext ) {

				},
				complete:	function() {

				},
			} );
		} else if ( _.indexOf( wpv_parametric_i18n.form_filters_shortcodes, shortcode_name ) != -1 ) {
			// A search filter shortcode was inserted.
			// Refresh the query filters section on filter editor update!
			self.refreshQueryFiltersOnFilterEditorSave = true;
		}
	} );

	$( document ).on( 'js_event_wpv_save_section_filter_completed', function() {
		if ( false === self.refreshQueryFiltersOnFilterEditorSave ) {
			return;
		}
		Toolset.hooks.doAction( 'wpv-action-wpv-edit-screen-update-query-filter-list' );
		self.refreshQueryFiltersOnFilterEditorSave = false;
	});

	/**
	 * Make sure that filters and form elements are inserted inside the [wpv-filter-controls] shortcode.
	 *
	 * @param object shortcode_data
	 *     shortcode      string The shortcode just processed.
	 *     name           string The name of the processed shortcode.
	 *     attributes     object A key => value set of attribute pairs.
	 *     raw_attributes object A key => value set of attribute pairs, as collected from the dialog.
	 *     content        string The shortcode content when it is not self-closing.
	 *
	 * @note When there are no wrapping shortcodes, insert at cursor.
	 *
	 * @since 2.4.0
	 */
	self.check_cursor_position = function( shortcode_data, shortcode_action ) {
		if ( 'insert' != shortcode_action ) {
			return;
		}

		if (
			'wpv_filter_meta_html_content' === window.wpcfActiveEditor &&
			_.has( WPV_Toolset.CodeMirror_instance, 'wpv_filter_meta_html_content' ) &&
			(
				_.indexOf( wpv_parametric_i18n.form_filters_shortcodes, shortcode_data.name ) != -1 ||
				_.indexOf( [ 'wpv-filter-search-box', 'wpv-filter-submit', 'wpv-filter-reset', 'wpv-filter-spinner' ], shortcode_data.name ) != -1
			)
		) {
			const current_cursor = WPV_Toolset.CodeMirror_instance[ 'wpv_filter_meta_html_content' ].getCursor( true ),
				text_before = WPV_Toolset.CodeMirror_instance[ 'wpv_filter_meta_html_content' ].getRange( { line: 0, ch: 0 }, current_cursor ),
				text_after = WPV_Toolset.CodeMirror_instance[ 'wpv_filter_meta_html_content' ].getRange( current_cursor, { line: WPV_Toolset.CodeMirror_instance[ 'wpv_filter_meta_html_content' ].lastLine(), ch: null } );

			if (
				text_before.search( /\[wpv-filter-controls\]/g ) == -1 ||
				text_after.search( /\[\/wpv-filter-controls\]/g ) == -1
			) {
				const insert_position = WPV_Toolset.CodeMirror_instance[ 'wpv_filter_meta_html_content' ].getSearchCursor( '[/wpv-filter-controls]', false );
				if ( insert_position.findNext() ) {
					WPV_Toolset.CodeMirror_instance[ 'wpv_filter_meta_html_content' ].setSelection( insert_position.from(), insert_position.from() );
				}
			}
		}
	};

	self.add_control_structure_on_insert = function( shortcode_data ) {
		let shortcode_name			= shortcode_data.name,
			shortcode_atts			= shortcode_data.attributes,
			shortcode_raw_atts		= shortcode_data.raw_attributes,
			shortcode_content		= shortcode_data.content,
			shortcode_string		= shortcode_data.shortcode,
			shortcode_gui_action	= Toolset.hooks.applyFilters( 'wpv-filter-wpv-shortcodes-gui-get-gui-action', 'insert' );

		var control_type = '',
			output_type = '';

		shortcode_string = Toolset.hooks.applyFilters(
			'wpv-filter-wpv-shortcodes-gui-add-control-structure-on-insert-for-' + shortcode_name,
			shortcode_string,
			shortcode_data,
			shortcode_gui_action
		);

		if ( _.contains( [ 'wpv-control-post-taxonomy', 'wpv-control-postmeta' ], shortcode_name ) ) {
			if ( 'insert' === shortcode_gui_action ) {

				if ( _.has( shortcode_raw_atts, 'type' ) ) {
					control_type = shortcode_raw_atts.type;
					if ( control_type.substr( 0, 8 ) == 'toolset-' ) {
						control_type = control_type.substr( 8 );
					}
				}
				if ( _.has( shortcode_raw_atts, 'output' ) ) {
					output_type = shortcode_raw_atts.output;
				}

				if (
					_.has( shortcode_raw_atts, 'value_compare' ) &&
					(
						'BETWEEN' === shortcode_raw_atts.value_compare||
						'NOT BETWEEN' === shortcode_raw_atts.value_compare
					)
				) {
					// Compose the lower shortcode, by using the url_param_min attribute in place of thr url_param one
					// Then somehow we need to compose the other one, maybe iterating over shortcode_atts
					// but replacing url_param with url_param_max
					// and returning everything in shortcode_string
					let shortcode_atts_min = shortcode_atts,
						shortcode_atts_min_string = '',
						shortcode_string_for_between_min = '',
						shortcode_atts_max = shortcode_atts,
						shortcode_atts_max_string = '',
						shortcode_string_for_between_max = '',
						skipped_atts = [ 'boundary_label_min', 'boundary_label_max' ];

					shortcode_atts_min.url_param = shortcode_raw_atts.url_param_min;
					_.each( shortcode_atts_min, function( value, key ) {
						if ( value && ! skipped_atts.includes( key ) ) {
							shortcode_atts_min_string += ' ' + key + '="' + value + '"';
						}
					} );
					shortcode_string_for_between_min += '[' + shortcode_name + shortcode_atts_min_string + ']';

					shortcode_atts_max.url_param = shortcode_raw_atts.url_param_max;

					_.each( shortcode_atts_max, function( value, key ) {
						if ( value && ! skipped_atts.includes( key ) ) {
							shortcode_atts_max_string += ' ' + key + '="' + value + '"';
						}
					} );
					shortcode_string_for_between_max += '[' + shortcode_name + shortcode_atts_max_string + ']';

					var shortcode_label_min = _.has( shortcode_raw_atts, 'boundary_label_min' ) ? ( '[wpml-string context="wpv-views"]' + shortcode_raw_atts.boundary_label_min + '[/wpml-string]' ) : '';
					var shortcode_label_max = _.has( shortcode_raw_atts, 'boundary_label_min' ) ? ( '[wpml-string context="wpv-views"]' + shortcode_raw_atts.boundary_label_max + '[/wpml-string]' ) : '';

					if ( 'bootstrap' === output_type ) {
						shortcode_string_for_between_min = '<div class="form-group">' + '\n\t' + '<label' + self.maybeGenerateForAttribute(shortcode_raw_atts, 'url_param_min') + '>' + shortcode_label_min + '</label>' + '\n\t' + shortcode_string_for_between_min + '\n' + '</div>';
						shortcode_string_for_between_max = '<div class="form-group">' + '\n\t' + '<label' + self.maybeGenerateForAttribute(shortcode_raw_atts, 'url_param_max') + '>' + shortcode_label_max + '</label>' + '\n\t' + shortcode_string_for_between_max + '\n' + '</div>';
					} else {
						shortcode_string_for_between_min = shortcode_label_min + '\n' + shortcode_string_for_between_min;
						shortcode_string_for_between_max = shortcode_label_max + '\n' + shortcode_string_for_between_max;
					}

					shortcode_string = shortcode_string_for_between_min + '\n' + shortcode_string_for_between_max;
				} else {
					if ( 'checkbox' === control_type ) {
						if ( 'bootstrap' === output_type ) {
							shortcode_string = '<div class="form-group">' + '\n\t' + shortcode_string + '\n' + '</div>';
						}
					} else {
						var shortcode_label = _.has( shortcode_raw_atts, 'shortcode_label' ) ? ( '[wpml-string context="wpv-views"]' + shortcode_raw_atts.shortcode_label + '[/wpml-string]' ) : '';
						if ( 'bootstrap' === output_type ) {
							shortcode_string = '<div class="form-group">' + '\n\t' + '<label' + self.maybeGenerateForAttribute(shortcode_raw_atts) + '>' + shortcode_label + '</label>' + '\n\t' + shortcode_string + '\n' + '</div>';
						} else {
							shortcode_string = shortcode_label + '\n' + shortcode_string;
						}
					}
				}
			} else if ( 'edit' === shortcode_gui_action ) {
				if (
					_.has( shortcode_raw_atts, 'value_compare' ) &&
					(
						'BETWEEN LOW' === shortcode_raw_atts.value_compare||
						'NOT BETWEEN LOW' === shortcode_raw_atts.value_compare ||
						'BETWEEN HIGH' === shortcode_raw_atts.value_compare ||
						'NOT BETWEEN HIGH' === shortcode_raw_atts.value_compare
					)
				) {
// ???
				}
			}
		}

		if (
			'wpv-filter-search-box' === shortcode_name&&
			'insert' === shortcode_gui_action
		) {
			output_type = '';
			shortcode_label = '';

			if ( _.has( shortcode_raw_atts, 'output' ) ) {
				output_type = shortcode_raw_atts.output;
			}
			if (
				_.has( shortcode_raw_atts, 'value_label' ) &&
				shortcode_raw_atts.value_label !== ''
			) {
				shortcode_label = '<label for="wpv-post-search">[wpml-string context="wpv-views"]' + shortcode_raw_atts.value_label + '[/wpml-string]</label>';
			}
			if ( 'bootstrap' === output_type ) {
				shortcode_label = '' !== shortcode_label ? shortcode_label + '\n\t' : shortcode_label;
				shortcode_string = '<div class="form-group">' + '\n\t' + shortcode_label + shortcode_string + '\n' + '</div>';
			} else {
				shortcode_label = '' !== shortcode_label ? shortcode_label + '\n' : shortcode_label;
				shortcode_string = shortcode_label + shortcode_string;
			}
		}

		shortcode_data.shortcode = shortcode_string;

		return shortcode_data;
	};

	self.edit_stored_custom_search_shortcodes_attributes = function( shortcode_data ) {
		if ( shortcode_data.tag === 'wpv-control-post-taxonomy' ) {
			if ( $( '.js-wpv-filter-row-taxonomy-' + shortcode_data.attrs.named.taxonomy ).length > 0 ) {
				const taxonomy_filter_row = $( '.js-wpv-filter-row-taxonomy-' + shortcode_data.attrs.named.taxonomy );
				shortcode_data.attrs.named.value_compare = taxonomy_filter_row.find( '#taxonomy-' + shortcode_data.attrs.named.taxonomy + '-attribute-operator' ).val();
			}
		} else if ( shortcode_data.tag == 'wpv-control-postmeta' ) {
			if ( $( '.js-filter-row-custom-field-' + shortcode_data.attrs.named.field ).length > 0 ) {
				const postmeta_filter_row = $( '.js-filter-row-custom-field-' + shortcode_data.attrs.named.field );
				shortcode_data.attrs.named.value_compare = postmeta_filter_row.find( '.js-wpv-custom-field-compare-select' ).val();
				shortcode_data.attrs.named.value_type = postmeta_filter_row.find( '.js-wpv-custom-field-type-select' ).val();
				shortcode_data.attrs.named.value_real = postmeta_filter_row.find( '.js-wpv-custom-field-values-real' ).val();
			}
		}
		return shortcode_data;
	};

	self.load_group_native_postmeta = function( native_postmeta_group_list ) {
		let thiz = $( '.js-wpv-parametric-search-filter-load-group-native-postmeta' ),
			thiz_group_list = thiz.closest( '.js-wpv-parametric-search-filter-group-native-postmeta' ),
			post_fields_section = '';
		_.each( native_postmeta_group_list, function( element, index, list ) {
			post_fields_section += '<button class="item button button-secondary button-small js-wpv-parametric-search-filter-item-dialog"';
			post_fields_section += ' onclick="WPViews.shortcodes_gui.wpv_insert_shortcode_dialog_open({ shortcode: \'wpv-control-postmeta\', title: \'' + element + '\', params: { attributes: { field: \'' + element + '\' } } }); return false;"';
			if ( $( '.js-filter-row-custom-field-' + element, '.js-wpv-filter-row-custom-field' ).length > 0 ) {
				post_fields_section += ' disabled="disabled"';
			}
			post_fields_section += ' style="margin:5px 5px 0 0;font-size:11px;">';
			post_fields_section += element;
			post_fields_section += '</button>';
		} );
		thiz_group_list
			.fadeOut( 'fast', function() {
				thiz_group_list
					.html( post_fields_section )
					.fadeIn( 'fast' );
			} );
	};

	$( document ).on( 'click', '.js-wpv-parametric-search-filter-load-group-native-postmeta', function() {
		let thiz = $( this ),
			spinnerContainer = $( '<span class="wpv-spinner ajax-loader">' ).insertAfter( thiz ).show();
		thiz.prop( 'disabled', true );
		if ( self.cache.meta_fields.postmeta ) {
			self.load_group_native_postmeta( self.cache.meta_fields.postmeta );
		} else {
			const native_postmeta_group = Toolset.hooks.applyFilters( 'wpv-filter-wpv-shortcodes-gui-get-post-fields-list', [] );
			if ( native_postmeta_group ) {
				self.cache.meta_fields.postmeta = native_postmeta_group;
				self.load_group_native_postmeta( self.cache.meta_fields.postmeta );
			} else {
				const url = wpv_parametric_i18n.ajaxurl + '&action=wpv_shortcodes_gui_load_post_fields_on_demand';
				$.ajax( {
					url: url,
					success: function( response ) {
						self.cache.meta_fields.postmeta = response.data.fields;
						Toolset.hooks.doAction( 'wpv-filter-wpv-shortcodes-gui-set-post-fields-list', self.cache.meta_fields.postmeta );
						self.load_group_native_postmeta( self.cache.meta_fields.postmeta );
					},
				} );
			}
		}
	} );

	self.manage_control_post_taxonomy_gui_per_type = function( type_value ) {
		switch ( type_value ) {
			case 'select':
				$( '.js-wpv-shortcode-gui-attribute-wrapper-for-default_label' ).slideDown( 'fast' );
				$( '.js-wpv-shortcode-gui-attribute-group-for-label_frontend_combo' ).slideUp( 'fast' );
				break;
			case 'radios':
				$( '.js-wpv-shortcode-gui-attribute-wrapper-for-default_label' ).slideDown( 'fast' );
				$( '.js-wpv-shortcode-gui-attribute-group-for-label_frontend_combo' ).slideDown( 'fast' );
				break;
			case 'multi-select':
				$( '.js-wpv-shortcode-gui-attribute-wrapper-for-default_label' ).slideUp( 'fast' );
				$( 'js-wpv-shortcode-gui-attribute-group-for-label_frontend_combo' ).slideUp( 'fast' );
				break;
			case 'checkboxes':
				$( '.js-wpv-shortcode-gui-attribute-wrapper-for-default_label' ).slideUp( 'fast' );
				$( '.js-wpv-shortcode-gui-attribute-group-for-label_frontend_combo' ).slideDown( 'fast' );
				break;
		}
		return self;
	};

	$( document ).on( 'change', '#wpv-control-post-taxonomy-type', function() {
		self.manage_control_post_taxonomy_gui_per_type( $( this ).val() );
	} );

	self.adjust_control_post_taxonomy_dialog = function( data ) {
		self.manage_control_post_taxonomy_gui_per_type( $( '#wpv-control-post-taxonomy-type' ).val() );
	};

	self.filter_control_post_taxonomy_computed_attributes = function( attribute_pairs ) {
		if ( _.has( attribute_pairs, 'type' ) ) {
			switch ( attribute_pairs.type ) {
				case 'select':
					attribute_pairs.label_class = false;
					attribute_pairs.label_style = false;
					break;
				case 'multi-select':
					attribute_pairs.default_label = false;
					attribute_pairs.label_class = false;
					attribute_pairs.label_style = false;
					break;
				case 'radios':

					break;
				case 'checkboxes':
					attribute_pairs.default_label = false;
					break;
			}
		}
		attribute_pairs.value_compare = false;
		attribute_pairs.shortcode_label = false;
		return attribute_pairs;
	};

	self.adjust_control_postmeta_gui_per_source = function() {
		const type_value = $( '#wpv-control-postmeta-type' ).val(),
			source_value = $( '#wpv-control-postmeta-source' ).val();
		switch ( source_value ) {
			case 'custom':
				$( '.js-wpv-shortcode-gui-attribute-wrapper-for-value_combo' ).slideDown( 'fast' );
				$( '.js-wpv-shortcode-gui-attribute-wrapper-for-order' ).slideUp( 'fast' );
				$( '.js-wpv-shortcode-gui-attribute-wrapper-for-default_label' ).slideUp( 'fast' );
				break;
			case 'database':
			default:
				$( '.js-wpv-shortcode-gui-attribute-wrapper-for-value_combo' ).slideUp( 'fast' );
				$( '.js-wpv-shortcode-gui-attribute-wrapper-for-order' ).slideDown( 'fast' );
				if (
					'select' == type_value ||
					'radios' == type_value
				) {
					$( '.js-wpv-shortcode-gui-attribute-wrapper-for-default_label' ).slideDown( 'fast' );
				} else {
					$( '.js-wpv-shortcode-gui-attribute-wrapper-for-default_label' ).slideUp( 'fast' );
				}
				break;
		}
		return self;
	};

	$( document ).on( 'change', '#wpv-control-postmeta-source', function() {
		self.adjust_control_postmeta_gui_per_source();
	} );

	self.adjust_control_postmeta_gui_per_type = function() {
		let type_value = $( '#wpv-control-postmeta-type' ).val(),
			source_value = $( '#wpv-control-postmeta-source' ).val();
		$( '.js-wpv-shortcode-gui-attribute-wrapper-for-value_combo' ).slideUp( 'fast' );
		$( '.js-wpv-shortcode-gui-attribute-wrapper-for-title' ).slideUp( 'fast' );
		$( '.js-wpv-shortcode-gui-attribute-wrapper-for-date_format' ).slideUp( 'fast' );
		$( '.js-wpv-shortcode-gui-attribute-wrapper-for-default_date' ).slideUp( 'fast' );
		$( '.js-wpv-shortcode-gui-attribute-wrapper-for-placeholder' ).slideUp( 'fast' );

		if ( type_value.substr( 0, 8 ) == 'toolset-' ) {
			type_value = type_value.substr( 8 );
		}
		switch ( type_value ) {
			case 'select':
				$( '.js-wpv-shortcode-gui-attribute-wrapper-for-source' ).slideDown( 'fast' );
				$( '.js-wpv-shortcode-gui-attribute-wrapper-for-format' ).slideDown( 'fast' );
				$( '.js-wpv-shortcode-gui-attribute-wrapper-for-order' ).slideDown( 'fast' );
				$( '.js-wpv-shortcode-gui-attribute-group-for-label_frontend_combo' ).slideUp( 'fast' );
				if ( 'database' == source_value ) {
					$( '.js-wpv-shortcode-gui-attribute-wrapper-for-default_label' ).slideDown( 'fast' );
				} else {
					$( '.js-wpv-shortcode-gui-attribute-wrapper-for-default_label' ).slideUp( 'fast' );
				}
				self.adjust_control_postmeta_gui_per_source();
				break;
			case 'radios':
				$( '.js-wpv-shortcode-gui-attribute-wrapper-for-source' ).slideDown( 'fast' );
				$( '.js-wpv-shortcode-gui-attribute-wrapper-for-format' ).slideDown( 'fast' );
				$( '.js-wpv-shortcode-gui-attribute-wrapper-for-order' ).slideDown( 'fast' );
				$( '.js-wpv-shortcode-gui-attribute-group-for-label_frontend_combo' ).slideDown( 'fast' );
				if ( 'database' == source_value ) {
					$( '.js-wpv-shortcode-gui-attribute-wrapper-for-default_label' ).slideDown( 'fast' );
				} else {
					$( '.js-wpv-shortcode-gui-attribute-wrapper-for-default_label' ).slideUp( 'fast' );
				}
				self.adjust_control_postmeta_gui_per_source();
				break;
			case 'multi-select':
				$( '.js-wpv-shortcode-gui-attribute-wrapper-for-source' ).slideDown( 'fast' );
				$( '.js-wpv-shortcode-gui-attribute-wrapper-for-format' ).slideDown( 'fast' );
				$( '.js-wpv-shortcode-gui-attribute-wrapper-for-order' ).slideDown( 'fast' );
				$( '.js-wpv-shortcode-gui-attribute-group-for-label_frontend_combo' ).slideUp( 'fast' );
				$( '.js-wpv-shortcode-gui-attribute-wrapper-for-default_label' ).slideUp( 'fast' );
				self.adjust_control_postmeta_gui_per_source();
				break;
			case 'checkboxes':
				$( '.js-wpv-shortcode-gui-attribute-wrapper-for-source' ).slideDown( 'fast' );
				$( '.js-wpv-shortcode-gui-attribute-wrapper-for-format' ).slideDown( 'fast' );
				$( '.js-wpv-shortcode-gui-attribute-wrapper-for-order' ).slideDown( 'fast' );
				$( '.js-wpv-shortcode-gui-attribute-group-for-label_frontend_combo' ).slideDown( 'fast' );
				$( '.js-wpv-shortcode-gui-attribute-wrapper-for-default_label' ).slideUp( 'fast' );
				self.adjust_control_postmeta_gui_per_source();
				break;
			case 'checkbox':
				$( '.js-wpv-shortcode-gui-attribute-wrapper-for-title' ).slideDown( 'fast' );

				$( '.js-wpv-shortcode-gui-attribute-wrapper-for-source' ).slideUp( 'fast' );
				$( '.js-wpv-shortcode-gui-attribute-wrapper-for-default_label' ).slideUp( 'fast' );
				$( '.js-wpv-shortcode-gui-attribute-wrapper-for-format' ).slideUp( 'fast' );
				$( '.js-wpv-shortcode-gui-attribute-wrapper-for-order' ).slideUp( 'fast' );
				$( '.js-wpv-shortcode-gui-attribute-group-for-label_frontend_combo' ).slideDown( 'fast' );
				break;
			case 'date':
				$( '.js-wpv-shortcode-gui-attribute-wrapper-for-date_format' ).slideDown( 'fast' );
				$( '.js-wpv-shortcode-gui-attribute-wrapper-for-default_date' ).slideDown( 'fast' );

				$( '.js-wpv-shortcode-gui-attribute-wrapper-for-source' ).slideUp( 'fast' );
				$( '.js-wpv-shortcode-gui-attribute-wrapper-for-default_label' ).slideUp( 'fast' );
				$( '.js-wpv-shortcode-gui-attribute-wrapper-for-format' ).slideUp( 'fast' );
				$( '.js-wpv-shortcode-gui-attribute-wrapper-for-order' ).slideUp( 'fast' );
				$( '.js-wpv-shortcode-gui-attribute-group-for-label_frontend_combo' ).slideUp( 'fast' );
				break;
			case 'textfield':
			default:
				$( '.js-wpv-shortcode-gui-attribute-wrapper-for-source' ).slideUp( 'fast' );
				$( '.js-wpv-shortcode-gui-attribute-wrapper-for-default_label' ).slideUp( 'fast' );
				$( '.js-wpv-shortcode-gui-attribute-wrapper-for-format' ).slideUp( 'fast' );
				$( '.js-wpv-shortcode-gui-attribute-wrapper-for-order' ).slideUp( 'fast' );
				$( '.js-wpv-shortcode-gui-attribute-group-for-label_frontend_combo' ).slideUp( 'fast' );
				$( '.js-wpv-shortcode-gui-attribute-wrapper-for-placeholder' ).slideDown( 'fast' );
				break;
		}
		return self;
	};

	$( document ).on( 'change', '#wpv-control-postmeta-type', function() {
		self.adjust_control_postmeta_gui_per_type();
	} );

	self.adjust_control_postmeta_gui_per_value_compare = function() {
		const compare_value = $( '#wpv-control-postmeta-value_compare' ).val();
		if (
			'BETWEEN' == compare_value ||
			'NOT BETWEEN' == compare_value
		) {
			$( '.js-wpv-shortcode-gui-attribute-wrapper-for-url_param' ).slideUp( 'fast' );
			$( '.js-wpv-shortcode-gui-attribute-group-for-url_param_combo' ).slideDown( 'fast' );
			$( '.js-wpv-shortcode-gui-attribute-group-for-boundary_label_combo' ).slideDown( 'fast' );
		} else {
			$( '.js-wpv-shortcode-gui-attribute-wrapper-for-url_param' ).slideDown( 'fast' );
			$( '.js-wpv-shortcode-gui-attribute-group-for-url_param_combo' ).slideUp( 'fast' );
			$( '.js-wpv-shortcode-gui-attribute-group-for-boundary_label_combo' ).slideUp( 'fast' );
		}
		return self;
	};

	$( document ).on( 'change', '#wpv-control-postmeta-value_compare', function() {
		self.adjust_control_postmeta_gui_per_value_compare();
	} );

	self.update_control_postmeta_custom_source_management = function() {
		const options = $( '.js-wpv-frontend-filter-postmeta-custom-options-list tbody tr.js-wpv-frontend-filter-postmeta-custom-options-list-item' );
		if ( options.length > 0 ) {
			// Update handles for actions
			const option_first = options.first(),
				option_else = options.slice(1);
			option_first
				.find( '.js-wpv-frontend-filter-postmeta-custom-options-list-item-delete' )
				.hide();
			option_else
				.find( '.js-wpv-frontend-filter-postmeta-custom-options-list-item-delete' )
				.show();
		}
		return self;
	};

	self.add_control_postmeta_custom_source_option = function() {

		var table_body = $( '.js-wpv-frontend-filter-postmeta-custom-options-list tbody' ),
			new_option = '';

		new_option += '<tr class="wpv-editable-list-item js-wpv-frontend-filter-postmeta-custom-options-list-item">';
		new_option += '<td><i class="icon-move fa fa-arrows wpv-editable-list-item-move js-wpv-frontend-filter-postmeta-custom-options-list-item-move ui-sortable-handle"></i></td>';
		new_option += '<td><input class="js-wpv-frontend-filter-postmeta-custom-options-list-item-value" type="text" /></td>';
		new_option += '<td><input class="js-wpv-frontend-filter-postmeta-custom-options-list-item-display-value" type="text" /></td>';
		new_option += '<td>';
		new_option += '<button class="button button-secondary button-small wpv-editable-list-item-delete js-wpv-frontend-filter-postmeta-custom-options-list-item-delete">';
		new_option += '<i class="icon-remove fa fa-times"></i>';
		new_option += '</button>';
		new_option += '</td>';
		new_option += '</tr>';

		table_body.append( new_option );

		table_body.sortable( 'refresh' );

		self.update_control_postmeta_custom_source_management();
	};

	$( document ).on( 'click', '.js-wpv-frontend-filter-postmeta-custom-options-list-add', function( e ) {
		e.preventDefault();
		self.add_control_postmeta_custom_source_option();
	} );

	$( document ).on( 'click', '.js-wpv-frontend-filter-postmeta-custom-options-list-item-delete', function( e ) {
		e.preventDefault();
		const delete_button = $( this ),
			delete_item = delete_button.closest( '.js-wpv-frontend-filter-postmeta-custom-options-list-item' );

		delete_item.addClass( 'wpv-editable-list-item-deleted' );
		setTimeout( function() {
			delete_item.fadeOut( 'fast', function() {
				$( this ).remove();
				$( '.js-wpv-frontend-filter-postmeta-custom-options-list tbody' ).sortable( 'refresh' );
				self.update_control_postmeta_custom_source_management();
			} );
		}, 500 );
	} );

	self.adjust_control_postmeta_dialog = function( data ) {
		$( '.js-wpv-frontend-filter-postmeta-custom-options-list tbody' ).sortable( {
			handle: '.js-wpv-frontend-filter-postmeta-custom-options-list-item-move',
			axis: 'y',
			containment: '.js-wpv-frontend-filter-postmeta-custom-options-list tbody',
			items: '> tr',
			helper: function( e, ui ) {
				// Fix the collapse of the dragged row width
				// https://paulund.co.uk/fixed-width-sortable-tables
				ui.children().each( function() {
					$( this ).width( $( this ).width() );
				} );
				return ui;
			},
			tolerance: 'pointer',
			update: function( event, ui ) {
				self.update_control_postmeta_custom_source_management();
			},
		} );

		self.update_control_postmeta_custom_source_management();
		self.adjust_control_postmeta_gui_per_type();
		self.adjust_control_postmeta_gui_per_value_compare();

		if ( ! _.has( data, 'overrides' ) ) {
			data.overrides = {};
		}
		if ( ! _.has( data.overrides, 'attributes' ) ) {
			data.overrides.attributes = {};
		}

		if (
			_.has( data.overrides.attributes, 'values' ) &&
			_.has( data.overrides.attributes, 'display_values' )
		) {
			let values = data.overrides.attributes.values.split( ',' ),
				display_values = data.overrides.attributes.display_values.split( ',' ),
				values_length = Math.min( values.length, display_values.length );

			$( '#wpv-control-postmeta-source' )
				.val( 'custom' )
				.trigger( 'change' );

			values = values.slice( 0, values_length );
			display_values = display_values.slice( 0, values_length );

			values.forEach( function( current, index, all ) {
				self.add_control_postmeta_custom_source_option();
				let current_row = $( '.js-wpv-frontend-filter-postmeta-custom-options-list tbody tr.js-wpv-frontend-filter-postmeta-custom-options-list-item:last-child' ),
					current_dislay_value = display_values[ index ];

				current = current.replace( /\%\%COMMA\%\%/g, ',' );
				current_dislay_value = current_dislay_value.replace( /\%\%COMMA\%\%/g, ',' );
				current_row
					.find( '.js-wpv-frontend-filter-postmeta-custom-options-list-item-value' )
					.val( current );
				current_row
					.find( '.js-wpv-frontend-filter-postmeta-custom-options-list-item-display-value' )
					.val( current_dislay_value );
			} );
			// Fill as many table rows as needed, with the split things
			// We need a method for adding a new row, so we can generate the on JS directly
			// So remove the callback field definition for value_Combo.
		} else {
			self.add_control_postmeta_custom_source_option();
		}
		/*
		data_for_shortcode_dialog_requested_opened = {
				shortcode:	shortcode,
				title:		title,
				params:		params,
				overrides:	overrides,
				nonce:		wpv_shortcodes_gui_texts.wpv_editor_callback_nonce,
				dialog:		self.dialog_insert_shortcode
			};
		*/
	};

	self.compute_control_postmeta_custom_values = function( attribute_pairs ) {
		const values = [],
			display_values = [];
		$( '.js-wpv-frontend-filter-postmeta-custom-options-list tbody tr' ).each( function() {
			let option_row = $( this ),
				option_value = option_row.find( '.js-wpv-frontend-filter-postmeta-custom-options-list-item-value' ).val(),
				option_display_value = option_row.find( '.js-wpv-frontend-filter-postmeta-custom-options-list-item-display-value' ).val();
			option_value = option_value.replace( /,/g, '%%COMMA%%' );
			option_display_value = option_display_value.replace( /,/g, '%%COMMA%%' );
			values.push( option_value );
			display_values.push( option_display_value );
		} );
		attribute_pairs.values = values.join( ',' );
		attribute_pairs.display_values = display_values.join( ',' );
		return attribute_pairs;
	};

	self.filter_control_postmeta_computed_attributes = function( attribute_pairs ) {
		if ( 'custom' == attribute_pairs.source ) {
			attribute_pairs.order = false;
		}

		let actual_type = attribute_pairs.type;
		if ( attribute_pairs.type.substr( 0, 8 ) == 'toolset-' ) {
			actual_type = attribute_pairs.type.substr( 8 );
			attribute_pairs.type = false;
		}

		switch ( actual_type ) {
			case 'select':
			case 'radios':
				attribute_pairs.title = false;
				attribute_pairs.date_format = false;
				attribute_pairs.default_date = false;
				if ( 'custom' == attribute_pairs.source ) {
					attribute_pairs = self.compute_control_postmeta_custom_values( attribute_pairs );
				} else {
					attribute_pairs.values = false;
					attribute_pairs.display_values = false;
				}
				if ( 'select' == actual_type ) {
					attribute_pairs.label_class = false;
					attribute_pairs.label_style = false;
				}
				break;
			case 'multi-select':
			case 'checkboxes':
				attribute_pairs.title = false;
				attribute_pairs.date_format = false;
				attribute_pairs.default_date = false;
				attribute_pairs.default_label = false;

				if ( 'custom' == attribute_pairs.source ) {
					attribute_pairs = self.compute_control_postmeta_custom_values( attribute_pairs );
				} else {
					attribute_pairs.values = false;
					attribute_pairs.display_values = false;
				}
				if ( 'multi-select' == actual_type ) {
					attribute_pairs.label_class = false;
					attribute_pairs.label_style = false;
				}
				break;
			case 'checkbox':
				attribute_pairs.date_format = false;
				attribute_pairs.default_date = false;
				attribute_pairs.source = false;
				attribute_pairs.default_label = false;
				attribute_pairs.format = false;
				attribute_pairs.order = false;
				attribute_pairs.values = false;
				attribute_pairs.display_values = false;
				break;
			case 'date':
				attribute_pairs.title = false;
				attribute_pairs.source = false;
				attribute_pairs.default_label = false;
				attribute_pairs.format = false;
				attribute_pairs.order = false;
				attribute_pairs.label_class = false;
				attribute_pairs.label_style = false;
				attribute_pairs.values = false;
				attribute_pairs.display_values = false;
				break;
			case 'textfield':
			default:
				attribute_pairs.title = false;
				attribute_pairs.date_format = false;
				attribute_pairs.default_date = false;
				attribute_pairs.source = false;
				attribute_pairs.default_label = false;
				attribute_pairs.format = false;
				attribute_pairs.order = false;
				attribute_pairs.label_class = false;
				attribute_pairs.label_style = false;
				attribute_pairs.values = false;
				attribute_pairs.display_values = false;
				break;
		}

		attribute_pairs.value_compare = false;
		attribute_pairs.value_type = false;
		attribute_pairs.value_combo = false;
		attribute_pairs.value_real = false;

		attribute_pairs.url_param_min = false;
		attribute_pairs.url_param_max = false;

		attribute_pairs.shortcode_label = false;

		return attribute_pairs;
	};

	/**
     * Initialise the Filter Editor buttons in the case of 'posts' View query type and 'parametric' View purpose.
	 *
	 * @param editor_id The editor id.
	 *
     * @since 2.4.1
     */
	self.initFilterButtons = function( editor_id ) {
		if ( 'wpv_filter_meta_html_content' !== editor_id ) {
			return self;
		}

		const queryType = Toolset.hooks.applyFilters( 'wpv-filter-wpv-edit-screen-get-query-type', 'posts' ),
			purpose = Toolset.hooks.applyFilters( 'wpv-filter-wpv-edit-screen-get-purpose', '' );

		if ( queryType === 'posts' || purpose === 'parametric' ) {
			if ( $( '.js-wpv-settings-filter-extra .js-wpv-filter-editor-unlock' ).length > 0 ) {
				$( '.js-wpv-settings-filter-extra .js-code-editor-toolbar button:not( .js-wpv-parametric-search-filter-create )' ).prop( 'disabled', true );
				$( '.js-wpv-settings-filter-extra .quicktags-toolbar .button, .js-wpv-settings-filter-extra .quicktags-toolbar .js-code-editor-toolbar-button' ).prop( 'disabled', true );
				$( '.js-wpv-settings-filter-extra .js-wpv-parametric-search-filter-create' )
					.addClass( 'button-primary button-primary-toolset' )
					.removeClass( 'button-secondary' );
				if ( $( '.js-wpv-settings-filter-extra .js-wpv-filter-editor-overlay' ).length <= 0 ) {
					$( '.js-wpv-settings-filter-extra .CodeMirror-wrap ' ).prepend( self.overlayContainer );
				}

				// Unbinding the "mouseenter" event in order to disable the Toolset Tooltips when the editor buttons are disabled.
				// Of course we are binding the event again when the editor is unlocked.
				$( '.js-wpv-settings-filter-extra .js-code-editor-toolbar li' ).off( 'mouseenter' );
			} else {
				// Some browsers might keep buttons disabled on soft page reloads
				$( '.js-wpv-settings-filter-extra .js-code-editor-toolbar button:not( .js-wpv-parametric-search-filter-create )' ).prop( 'disabled', false );
				$( '.js-wpv-settings-filter-extra .quicktags-toolbar .button' ).prop( 'disabled', false );
			}
		}

		return self;
	};

	/**
     * Event handler for the editor quicktags initialization.
     * We needed to removed the faking of the "Show Bootstrap buttons" button and create a normal QT button instead.
     * Unfortunately, the special markup used for the Bootstrap buttons cannot be reproduced with the normal QT buttons,
     * so we still need to fake those, although for these to be faked, we now use the "quicktags-init" event that is
     * called every time a QT button is added.
     *
     * @since 2.4.1
     */
	jQuery( document ).on( 'quicktags-init', function( event, editor ) {
		_.defer( function() {
			self.initFilterButtons( editor.id );
		} );
	} );

	/**
     * Unlock the filter editor by removing the overlay div and by enabling all the buttons.
     *
     * @param unlockFilterControl The unlock control (normally the unlock hyperlink).
     *
     * @since 2.4.1
     */
	self.unlockFilterEditor = function( unlockFilterControl ) {
		const thizItem	= unlockFilterControl.closest( 'li' ),
			thizToolbar	= unlockFilterControl.closest( '.js-code-editor-toolbar' ),
			thizQuicktags	= $( '.js-wpv-settings-filter-extra .quicktags-toolbar' );
		thizItem.fadeOut( 'fast', function() {
			thizItem.remove();
			thizToolbar.find( '.button-secondary' ).prop( 'disabled', false );
			thizQuicktags.find( '.button, .js-code-editor-toolbar-button' ).prop( 'disabled', false );
			$( '.js-wpv-settings-filter-extra .js-wpv-parametric-search-filter-create' )
				.removeClass( 'button-primary-toolset button-primary' )
				.addClass( 'button-secondary' );
			$( '.js-wpv-settings-filter-extra .js-wpv-filter-editor-overlay' ).remove();

			// Reenabling the Toolset Tooltips that were disabled before when the editor buttons were disabled.
			$( '.js-wpv-settings-filter-extra .js-code-editor-toolbar li' ).each( function() {
            	const thiz = $( this ),
            		buttons_with_tooltips = [ '.js-wpv-parametric-search-text-filter-manage', '.js-wpv-parametric-search-submit-add', '.js-wpv-parametric-search-reset-add', '.js-wpv-parametric-search-spinner-add' ];
            	if ( thiz.find( 'button' ).is( buttons_with_tooltips.join() ) ) {
					thiz.toolsetTooltip();
				}
			} );
		} );
	};

	/**
     * Check if the editor is locked and if it is, unlock it.
     *
     * @since 2.4.1
     */
	self.maybeUnlockFilterEditor = function() {
    	const unlockFilterControl = $( '.js-wpv-settings-filter-extra .js-wpv-filter-editor-unlock' );
		if ( unlockFilterControl.length > 0 ) {
			self.unlockFilterEditor( unlockFilterControl );
		}
	};

	/**
     * Click handler for the "Unlock editor" hyperlinkCheck if the editor is locked and if it is, unlock it.
     *
     * @since 2.4.1
     */
	$( document ).on( 'click', '.js-wpv-filter-editor-unlock', function( e ) {
		e.preventDefault();
		self.maybeUnlockFilterEditor();
	} );

	/**
     * Click handler for the "New Filter" button with a callback that unlocks the filter editor.
     *
     * @since 2.4.1
     */
	$( document ).on( 'click', '.js-wpv-parametric-search-filter-create', function() {
		self.maybeUnlockFilterEditor();
	} );

	/**
     * Change handler for the "View purpose" dropdown that toggles the locking of the filter editor.
     *
     * @since 2.4.1
     */
	$( document ).on( 'js_event_wpv_screen_options_saved', function() {
		const purpose = Toolset.hooks.applyFilters( 'wpv-filter-wpv-edit-screen-get-purpose', '' );
		if ( purpose !== 'parametric' ) {
			self.maybeUnlockFilterEditor();
		}
	} );

	self.maybeGenerateForAttribute = function( rawShortcodeAttributes, parameterName ) {
		if( 'undefined' === typeof( parameterName ) ) {
			parameterName = 'url_param';
		}

		return _.has( rawShortcodeAttributes, parameterName )
			? ' for="' + rawShortcodeAttributes[parameterName] + '"'
			: '';
	};


	// ---------------------------------
	// Init hooks
	// ---------------------------------

	self.init_hooks = function() {
		/**
		 *
		 * @since 2.4.0
		 */
		Toolset.hooks.addAction( 'wpv-action-wpv-shortcodes-gui-before-do-action', self.check_cursor_position, 1 );
		Toolset.hooks.addFilter( 'wpv-filter-wpv-shortcodes-gui-before-do-action', self.add_control_structure_on_insert );
		Toolset.hooks.addFilter( 'wpv-filter-wpv-shortcodes-gui-maybe-edit-shortcode-data', self.edit_stored_custom_search_shortcodes_attributes, 20 );

		Toolset.hooks.addAction( 'wpv-action-wpv-shortcodes-gui-after-open-wpv-control-post-taxonomy-shortcode-dialog', self.adjust_control_post_taxonomy_dialog, 20 );
		Toolset.hooks.addFilter( 'wpv-filter-wpv-shortcodes-gui-wpv-control-post-taxonomy-computed-attributes-pairs', self.filter_control_post_taxonomy_computed_attributes );

		Toolset.hooks.addAction( 'wpv-action-wpv-shortcodes-gui-after-open-wpv-control-postmeta-shortcode-dialog', self.adjust_control_postmeta_dialog, 20 );
		Toolset.hooks.addFilter( 'wpv-filter-wpv-shortcodes-gui-wpv-control-postmeta-computed-attributes-pairs', self.filter_control_postmeta_computed_attributes );

		Toolset.hooks.addAction( 'wpv-action-wpv-edit-screen-query-type-changed', self.maybeUnlockFilterEditor, 10 );
		Toolset.hooks.addAction( 'toolset_text_editor_CodeMirror_init', self.initFilterButtons, 999 );

		return self;
	};

	// ---------------------------------
	// Init
	// ---------------------------------

	self.init = function() {
		self.init_hooks()
			.init_dialogs();
	};

	self.init();
};

jQuery( function( $ ) {
	WPViews.parametric_search_filters = new WPViews.ParametricSearchFilters( $ );
} );

WPViews.ParametricTextSearchButton = function( $ ) {
	const self = this;

	self.view_id = $( '.js-post_ID' ).val();

	self.button_action = 'create';

	self.button = $( '.js-wpv-parametric-search-text-filter-manage', '.js-wpv-filter-edit-toolbar' );
	self.button_container = self.button.closest( 'li' );
	self.editor_id = self.button.data( 'editor' );

	self.init_button = function() {
		self.button_container.toolsetTooltip();
		self.handle_flags();
	};

	self.has_filter = function() {
		return ( $( '.js-wpv-filter-post-search-options' ).length > 0 );
	};

	self.has_specific_filter = function() {
		return ( $( '.js-wpv-filter-post-search-options input#wpv-search-mode-specific' ).prop( 'checked' ) );
	};

	self.has_search = function() {
		const content = WPV_Toolset.CodeMirror_instance[ self.editor_id ].getValue();
		return (
			content.search( /\[wpv-filter-search-box/ ) == -1 &&
			content.search( /\url_param=\"wpv_post_search\"/ ) == -1
		) ? false : true;
	};

	self.is_button_disabled = function() {
		return (
			self.has_search() &&
			self.has_filter() &&
			! self.has_specific_filter()
		);
	};

	self.handle_flags = function() {
		self.button
			.removeClass( 'wpv-button-flagged' )
			.find( '.js-parametric-search-text-filter-button-complete, .js-parametric-search-text-filter-button-filter-missing' )
			.hide();
		if ( self.is_button_disabled() ) {
			self.button
				.addClass( 'disabled' )
				.addClass( 'wpv-button-flagged' )
				.find( '.js-parametric-search-text-filter-button-complete' )
				.show();
			self.button_container.data( 'tooltip-text', wpv_parametric_i18n.toolbar_buttons.text_search.tooltip.complete );
			self.button_action = 'none';
		} else {
			self.button
				.removeClass( 'disabled' );
			self.button_container.data( 'tooltip-text', wpv_parametric_i18n.toolbar_buttons.text_search.tooltip.original );
			self.button_action = 'create';
			if ( self.has_search() ) {
				if ( ! self.has_filter() ) {
					self.button
						.addClass( 'wpv-button-flagged' )
						.find( '.js-parametric-search-text-filter-button-filter-missing' )
						.show();
					self.button_container.data( 'tooltip-text', wpv_parametric_i18n.toolbar_buttons.text_search.tooltip.missing );
					self.button_action = 'complete_missing';
				} else if ( self.has_specific_filter() ) {
					self.button
						.addClass( 'wpv-button-flagged' )
						.find( '.js-parametric-search-text-filter-button-filter-missing' )
						.show();
					self.button_container.data( 'tooltip-text', wpv_parametric_i18n.toolbar_buttons.text_search.tooltip.wrong );
					self.button_action = 'complete_wrong';
				}
			}
		}
	};

	// @todo This will not be needed once we get the post search filter integrated with the other filters
	self.create_filter = function( shortcode_data ) {
		const data = {
			action:	'wpv_filter_post_search_update',
			id: self.view_id,
			filter_options: 'filter_by_search=1&post_search_value=&search_mode%5B%5D=manual&post_search_shortcode=search&post_search_content=' + shortcode_data.raw_attributes.value_where,
			update_query_filters_list: true,
			wpnonce:	wpv_parametric_i18n.toolbar_buttons.text_search.nonce,
		};
		$.ajax( {
			type:	'POST',
			dataType: 'json',
			async:	false, // Block any other interaction until this is completed
			url:	ajaxurl,
			data:	data,
			success:	function( response ) {
				if ( response.success ) {
					$( '.js-filter-list' ).html( response.data.query_filters );
					$( document ).trigger( 'js_event_wpv_query_filter_created', [ 'post_search' ] );
					Toolset.hooks.doAction( 'wpv-action-wpv-edit-screen-manage-save-queue', { section: 'save_filter_post_search', action: 'remove' } );
					$( document ).trigger( 'js_event_wpv_save_filter_post_search_completed' );
				}
			},
			error:	function( ajaxContext ) {

			},
			complete:	function() {
				self.handle_flags();
			},
		} );
	};

	self.maybe_edit_shortcode_data = function( shortcode_data ) {
		if (
			'wpv-filter-search-box' == shortcode_data.tag &&
			$( 'input[name="post_search_content"]:checked', '.js-wpv-filter-post-search-options' ).length > 0
		) {
			shortcode_data.attrs.named.value_where = $( 'input[name="post_search_content"]:checked', '.js-wpv-filter-post-search-options' ).val();
		}
		return shortcode_data;
	};

	self.extend_dialog_data = function( data ) {
		if ( 'wpv-filter-search-box' == data.shortcode ) {
			data.has_shortcode = ( self.has_search() ) ? 'true' : 'false';
		}
		return data;
	};

	self.adjust_dialog = function( data ) {
		let warning_message = '';
		if (
			self.has_search() ||
			self.has_filter()
		) {
			if ( self.has_filter() ) {
				if ( self.has_specific_filter() ) {
					warning_message = wpv_parametric_i18n.toolbar_buttons.text_search.warning.specific;
				} else if ( ! self.has_search() ) {
					warning_message = wpv_parametric_i18n.toolbar_buttons.text_search.warning.valid;
				}
			} else {
				warning_message = wpv_parametric_i18n.toolbar_buttons.text_search.warning.missing;
			}
		}

		if ( '' != warning_message ) {
			$( 'input.js-wpv-shortcode-gui-shortcode-name[value="wpv-filter-search-box"]' )
				.closest( '.js-toolset-dialog__body' )
					.prepend( '<p class="toolset-alert toolset-alert-info" style="margin:0 0 10px;">' + warning_message + '</p>' );
		}
	};

	self.filter_computed_attributes = function( attribute_pairs ) {
		attribute_pairs.value_where = false;
		attribute_pairs.value_label = false;
		if (
			_.has( attribute_pairs, 'output' ) &&
			'legacy' == attribute_pairs.output
		) {
			attribute_pairs.output = false;
		}
		return attribute_pairs;
	};

	self.before_insert_shortcode = function( shortcode_data ) {
		if ( 'wpv-filter-search-box' == shortcode_data.name ) {
			if (
				self.has_search() &&
				'insert' == Toolset.hooks.applyFilters( 'wpv-filter-wpv-shortcodes-gui-get-gui-action', 'insert' )
			) {
				Toolset.hooks.doAction( 'wpv-action-wpv-shortcodes-gui-set-gui-action', 'skip' );
			}
			self.create_filter( shortcode_data );
		}
		return shortcode_data;
	};

	self.init_hooks = function() {
		Toolset.hooks.addFilter( 'wpv-filter-wpv-shortcodes-gui-maybe-edit-shortcode-data', self.maybe_edit_shortcode_data );

		Toolset.hooks.addFilter( 'wpv-filter-wpv-shortcodes-gui-extend-shortcode-dialog-data', self.extend_dialog_data );

		Toolset.hooks.addAction( 'wpv-action-wpv-shortcodes-gui-after-open-wpv-filter-search-box-shortcode-dialog', self.adjust_dialog );

		Toolset.hooks.addFilter( 'wpv-filter-wpv-shortcodes-gui-wpv-filter-search-box-computed-attributes-pairs', self.filter_computed_attributes );

		Toolset.hooks.addFilter( 'wpv-filter-wpv-shortcodes-gui-before-do-action', self.before_insert_shortcode );
	};

	$( document ).on( 'js_event_wpv_query_filter_created js_event_wpv_query_filter_deleted', function( event, filter ) {
		if ( filter == 'post_search' ) {
			self.handle_flags();
		}
	} );

	// ---------------------------------
	// Init
	// ---------------------------------

	self.init = function() {
		self.init_button();
		self.init_hooks();

		self.button.on( 'click', function() {
			if ( self.button.hasClass( 'disabled' ) ) {
				return false;
			}
			const dialog_data = {
				shortcode: 'wpv-filter-search-box',
			};
			switch ( self.button_action ) {
				case 'complete_missing':
				case 'complete_wrong':
					dialog_data.title = wpv_parametric_i18n.toolbar_buttons.text_search.dialog_title.complete;
					break;
				case 'create':
				default:
					dialog_data.title = wpv_parametric_i18n.toolbar_buttons.text_search.dialog_title.create;

					break;
			}
			Toolset.hooks.doAction( 'wpv-action-wpv-shortcodes-gui-set-gui-action', 'insert' );
			if ( $( 'input[name="post_search_content"]:checked', '.js-wpv-filter-post-search-options' ).length > 0 ) {
				dialog_data.overrides = {
					attributes: {
						value_where: $( 'input[name="post_search_content"]:checked', '.js-wpv-filter-post-search-options' ).val(),
					},
				};
			}
			window.wpcfActiveEditor = self.editor_id;
			Toolset.hooks.doAction( 'wpv-action-wpv-shortcodes-gui-open-shortcode-dialog', dialog_data );
		} );
	};

	self.init();
};

WPViews.ParametricSubmitButton = function( $ ) {
	const self = this;

	self.button = $( '.js-wpv-parametric-search-submit-add', '.js-wpv-filter-edit-toolbar' );
	self.button_container = self.button.closest( 'li' );
	self.editor_id = self.button.data( 'editor' );

	self.init_button = function() {
		self.button_container.toolsetTooltip();
		self.handle_flags();
	};

	self.handle_flags = function() {
		if ( ! self.needsSubmitControl() ) {
			self.button
				.addClass( 'disabled' )
				.removeClass( 'wpv-button-flagged' );
			self.button_container.data( 'tooltip-text', wpv_parametric_i18n.toolbar_buttons.submit.tooltip.irrelevant );
			self.button
				.find( '.js-wpv-parametric-search-submit-button-irrelevant, .js-wpv-parametric-search-submit-button-incomplete, .js-wpv-parametric-search-submit-button-complete' )
				.hide();
			return;
		}

		self.button
			.removeClass( 'disabled' )
			.addClass( 'wpv-button-flagged' );

		let update_mode = '';
		if ( $( '.js-wpv-dps-ajax-results:checked' ).length > 0 ) {
			update_mode = $( '.js-wpv-dps-ajax-results:checked' ).val();
		}
		if ( update_mode == 'enable' ) {
			self.button
				.find( '.js-wpv-parametric-search-submit-button-irrelevant' )
				.show();
			self.button
				.find( '.js-wpv-parametric-search-submit-button-incomplete, .js-wpv-parametric-search-submit-button-complete' )
				.hide();
			if ( self.has_submit() ) {
				self.button_container.data( 'tooltip-text', wpv_parametric_i18n.toolbar_buttons.submit.tooltip.irrelevant_added );
			} else {
				self.button_container.data( 'tooltip-text', wpv_parametric_i18n.toolbar_buttons.submit.tooltip.irrelevant );
			}
		} else if ( update_mode != '' ) {
			self.button
				.find( '.js-wpv-parametric-search-submit-button-irrelevant, .js-wpv-parametric-search-submit-button-incomplete, .js-wpv-parametric-search-submit-button-complete' )
				.hide();
			if ( self.has_submit() ) {
				self.button.find( '.js-wpv-parametric-search-submit-button-complete' ).show();
				self.button_container.data( 'tooltip-text', wpv_parametric_i18n.toolbar_buttons.submit.tooltip.complete );
			} else {
				self.button.find( '.js-wpv-parametric-search-submit-button-incomplete' ).show();
				self.button_container.data( 'tooltip-text', wpv_parametric_i18n.toolbar_buttons.submit.tooltip.incomplete );
			}
		} else {
			self.button_container.data( 'tooltip-text', wpv_parametric_i18n.toolbar_buttons.submit.tooltip.irrelevant );
		}
	};

	self.needsSubmitControl = function() {
		const content = WPV_Toolset.CodeMirror_instance[ self.editor_id ].getValue();
		return ( content.search( /\[wpv-control/ ) == -1 && content.search( /\[wpv-filter-search/ ) == -1 && content.search( /\[wpv-sort-order/ ) == -1 ) ? false : true;
	};

	self.has_submit = function( ) {
		const content = WPV_Toolset.CodeMirror_instance[ self.editor_id ].getValue();
		return ( content.search( /\[wpv-filter-submit/ ) == -1 ) ? false : true;
	};

	self.filter_computed_attributes = function( attribute_pairs ) {
		if (
			_.has( attribute_pairs, 'output' ) &&
			'legacy' == attribute_pairs.output
		) {
			attribute_pairs.output = false;
		}
		return attribute_pairs;
	};

	// ---------------------------------
	// Init
	// ---------------------------------

	self.init = function() {
		self.init_button();

		self.button.on( 'click', function() {
			const dialog_data = {
				shortcode:	'wpv-filter-submit',
				title:	wpv_parametric_i18n.toolbar_buttons.submit.dialog_title,
			};
			if ( self.button.hasClass( 'disabled' ) ) {
				return false;
			}
			window.wpcfActiveEditor = self.editor_id;
			Toolset.hooks.doAction( 'wpv-action-wpv-shortcodes-gui-set-gui-action', 'insert' );
			Toolset.hooks.doAction( 'wpv-action-wpv-shortcodes-gui-open-shortcode-dialog', dialog_data );
		} );

		Toolset.hooks.addFilter( 'wpv-filter-wpv-shortcodes-gui-wpv-filter-submit-computed-attributes-pairs', self.filter_computed_attributes );
	};

	self.init();
};

WPViews.ParametricResetButton = function( $ ) {
	const self = this;

	self.button = $( '.js-wpv-parametric-search-reset-add', '.js-wpv-filter-edit-toolbar' );
	self.button_container = self.button.closest( 'li' );
	self.editor_id = self.button.data( 'editor' );

	self.init_button = function() {
		self.button_container.toolsetTooltip();
		self.handle_flags();
	};

	self.handle_flags = function() {
		if ( ! self.needsResetControl() ) {
			self.button
				.addClass( 'disabled' )
				.removeClass( 'wpv-button-flagged' );
			self.button_container.data( 'tooltip-text', wpv_parametric_i18n.toolbar_buttons.reset.tooltip.irrelevant );
			self.button
				.find( '.js-wpv-parametric-search-reset-button-complete' )
				.hide();
			return;
		}

		self.button.removeClass( 'disabled' );

		if ( self.has_reset() ) {
			self.button
				.addClass( 'wpv-button-flagged' )
				.find( '.js-wpv-parametric-search-reset-button-complete' )
				.show();
			self.button_container.data( 'tooltip-text', wpv_parametric_i18n.toolbar_buttons.reset.tooltip.complete );
		} else {
			self.button
				.removeClass( 'wpv-button-flagged' )
				.find( '.js-wpv-parametric-search-reset-button-complete' )
				.hide();
			self.button_container.data( 'tooltip-text', wpv_parametric_i18n.toolbar_buttons.reset.tooltip.original );
		}
	};

	self.needsResetControl = function() {
		const content = WPV_Toolset.CodeMirror_instance[ self.editor_id ].getValue();
		return ( content.search( /\[wpv-control/ ) == -1 && content.search( /\[wpv-filter-search/ ) == -1 ) ? false : true;
	};

	self.has_reset = function() {
		const content = WPV_Toolset.CodeMirror_instance[ self.editor_id ].getValue();
		return ( content.search( /\[wpv-filter-reset/ ) == -1 ) ? false : true;
	};

	self.filter_computed_attributes = function( attribute_pairs ) {
		if (
			_.has( attribute_pairs, 'output' ) &&
			'legacy' == attribute_pairs.output
		) {
			attribute_pairs.output = false;
		}
		return attribute_pairs;
	};

	// ---------------------------------
	// Init
	// ---------------------------------

	self.init = function() {
		self.init_button();

		self.button.on( 'click', function() {
			const dialog_data = {
				shortcode:	'wpv-filter-reset',
				title:	wpv_parametric_i18n.toolbar_buttons.reset.dialog_title,
			};
			if ( self.button.hasClass( 'disabled' ) ) {
				return false;
			}
			window.wpcfActiveEditor = self.editor_id;
			Toolset.hooks.doAction( 'wpv-action-wpv-shortcodes-gui-set-gui-action', 'insert' );
			Toolset.hooks.doAction( 'wpv-action-wpv-shortcodes-gui-open-shortcode-dialog', dialog_data );
		} );

		Toolset.hooks.addFilter( 'wpv-filter-wpv-shortcodes-gui-wpv-filter-reset-computed-attributes-pairs', self.filter_computed_attributes );
	};

	self.init();
};

WPViews.ParametricSpinnerButton = function( $ ) {
	const self = this;

	self.button = $( '.js-wpv-parametric-search-spinner-add', '.js-wpv-filter-edit-toolbar' );
	self.button_container = self.button.closest( 'li' );
	self.editor_id = self.button.data( 'editor' );

	self.init_button = function() {
		self.button_container.toolsetTooltip();
		self.handle_flags();
	};

	self.handle_flags = function() {
		const update_mode = $( '.js-wpv-dps-ajax-results:checked' ).val(),
			update_action = $( '.js-wpv-ajax-results-submit:checked' ).val(),
			dependency_mode = $( '.js-wpv-dps-enable:checked' ).val();

		if (
			dependency_mode != 'disable' ||
			(
				update_mode != 'disable' ||
				(
					update_mode == 'disable' &&
					update_action != 'reload'
				)
			)
		) {
			self.button.removeClass( 'disabled' );
			if ( self.has_spinner() ) {
				self.button
					.addClass( 'wpv-button-flagged' )
					.find( '.js-wpv-parametric-search-spinner-button-complete' )
					.show();
				self.button_container.data( 'tooltip-text', wpv_parametric_i18n.toolbar_buttons.spinner.tooltip.complete );
			} else {
				self.button
					.removeClass( 'wpv-button-flagged' )
					.find( '.js-wpv-parametric-search-spinner-button-complete' )
					.hide();
				self.button_container.data( 'tooltip-text', wpv_parametric_i18n.toolbar_buttons.spinner.tooltip.original );
			}
		} else {
			self.button
				.addClass( 'disabled' )
				.removeClass( 'wpv-button-flagged' )
				.find( '.js-wpv-parametric-search-spinner-button-complete' )
				.hide();
			self.button_container.data( 'tooltip-text', wpv_parametric_i18n.toolbar_buttons.spinner.tooltip.useless );
		}
	};

	self.has_spinner = function() {
		const content = WPV_Toolset.CodeMirror_instance[ self.editor_id ].getValue();
		return ( content.search( /\[wpv-filter-spinner/ ) == -1 ) ? false : true;
	};

	self.manage_spiner_image_gui_per_position = function() {
		const position = $( '#wpv-filter-spinner-position' ).val();
		if ( 'none' == position ) {
			$( '.js-wpv-shortcode-gui-attribute-wrapper-for-spinner' ).slideUp( 'fast' );
		} else {
			$( '.js-wpv-shortcode-gui-attribute-wrapper-for-spinner' ).slideDown( 'fast' );
		}
	};

	$( document ).on( 'change', '#wpv-filter-spinner-position', function() {
		self.manage_spiner_image_gui_per_position();
	} );

	self.adjust_dialog = function( data ) {
		self.manage_spiner_image_gui_per_position();
	};

	self.filter_computed_attributes = function( attribute_pairs ) {
		if (
			_.has( attribute_pairs, 'position' ) &&
			'none' === attribute_pairs.position
		) {
			attribute_pairs.spinner = false;
		}
		return attribute_pairs;
	};

	// ---------------------------------
	// Init
	// ---------------------------------

	self.init = function() {
		self.init_button();

		self.button.on( 'click', function() {
			const dialog_data = {
				shortcode:	'wpv-filter-spinner',
				title:	wpv_parametric_i18n.toolbar_buttons.spinner.dialog_title,
			};
			if ( self.button.hasClass( 'disabled' ) ) {
				return false;
			}
			window.wpcfActiveEditor = self.editor_id;
			Toolset.hooks.doAction( 'wpv-action-wpv-shortcodes-gui-set-gui-action', 'insert' );
			Toolset.hooks.doAction( 'wpv-action-wpv-shortcodes-gui-open-shortcode-dialog', dialog_data );
		} );

		Toolset.hooks.addAction( 'wpv-action-wpv-shortcodes-gui-after-open-wpv-filter-spinner-shortcode-dialog', self.adjust_dialog, 20 );
		Toolset.hooks.addFilter( 'wpv-filter-wpv-shortcodes-gui-wpv-filter-spinner-computed-attributes-pairs', self.filter_computed_attributes );
	};

	self.init();
};

WPViews.ParametricGenericButton = function( $ ) {
	const self = this;

	self.handle_flags = function() {
		WPViews.ParametricButtons.text_search.handle_flags();
		WPViews.ParametricButtons.submit.handle_flags();
		WPViews.ParametricButtons.reset.handle_flags();
		WPViews.ParametricButtons.spinner.handle_flags();
	};

	self.maybe_button_hide = function() {
		const query_type = Toolset.hooks.applyFilters( 'wpv-filter-wpv-edit-screen-get-query-type', 'posts' ),
			purpose = Toolset.hooks.applyFilters( 'wpv-filter-wpv-edit-screen-get-purpose', '' );

		if ( 'posts' == query_type ) {
			$( '.js-wpv-parametric-search-filter-create', '.js-wpv-filter-edit-toolbar' )
				.closest( 'li' )
				.show();
			$( '.js-wpv-parametric-search-filter-edit', '.js-wpv-filter-edit-toolbar' )
				.closest( 'li' )
				.show();
			$( '.js-wpv-parametric-search-text-filter-manage', '.js-wpv-filter-edit-toolbar' )
				.closest( 'li' )
				.show();
			$( '.js-wpv-parametric-search-submit-add', '.js-wpv-filter-edit-toolbar' )
				.closest( 'li' )
				.show();
			$( '.js-wpv-parametric-search-reset-add', '.js-wpv-filter-edit-toolbar' )
				.closest( 'li' )
				.show();
			$( '.js-wpv-parametric-search-spinner-add', '.js-wpv-filter-edit-toolbar' )
				.closest( 'li' )
				.show();
			switch ( purpose ) {
				case 'slider':
					$( '.js-wpv-parametric-search-filter-create', '.js-wpv-filter-edit-toolbar' )
						.closest( 'li' )
						.hide();
					$( '.js-wpv-parametric-search-filter-edit', '.js-wpv-filter-edit-toolbar' )
						.closest( 'li' )
						.hide();
					$( '.js-wpv-parametric-search-text-filter-manage', '.js-wpv-filter-edit-toolbar' )
						.closest( 'li' )
						.hide();
					$( '.js-wpv-parametric-search-submit-add', '.js-wpv-filter-edit-toolbar' )
						.closest( 'li' )
						.hide();
					$( '.js-wpv-parametric-search-reset-add', '.js-wpv-filter-edit-toolbar' )
						.closest( 'li' )
						.hide();
					$( '.js-wpv-parametric-search-spinner-add', '.js-wpv-filter-edit-toolbar' )
						.closest( 'li' )
						.hide();
					break;
			}
		} else {
			$( '.js-wpv-parametric-search-filter-create', '.js-wpv-filter-edit-toolbar' )
				.closest( 'li' )
				.hide();
			$( '.js-wpv-parametric-search-filter-edit', '.js-wpv-filter-edit-toolbar' )
				.closest( 'li' )
				.hide();
			$( '.js-wpv-parametric-search-text-filter-manage', '.js-wpv-filter-edit-toolbar' )
				.closest( 'li' )
				.hide();
			$( '.js-wpv-parametric-search-submit-add', '.js-wpv-filter-edit-toolbar' )
				.closest( 'li' )
				.hide();
			$( '.js-wpv-parametric-search-reset-add', '.js-wpv-filter-edit-toolbar' )
				.closest( 'li' )
				.hide();
			$( '.js-wpv-parametric-search-spinner-add', '.js-wpv-filter-edit-toolbar' )
				.closest( 'li' )
				.hide();
		}
	};

	$( document ).on( 'js_event_wpv_screen_options_saved', self.maybe_button_hide );
	$( document ).on( 'js_event_wpv_query_type_saved', self.maybe_button_hide );

	self.init = function() {
		self.maybe_button_hide();
		WPV_Toolset.CodeMirror_instance[ 'wpv_filter_meta_html_content' ].on( 'change', function() {
			self.handle_flags();
		} );
		Toolset.hooks.addAction( 'wpv-action-wpv-edit-screen-parametric-filter-buttons-handle-flags', self.handle_flags );
	};

	self.init();
};

jQuery(function ($) {
    if ( wpv_parametric_i18n.is_views_lite ) {
		return;
	}
	if ( ! wpv_parametric_i18n.is_legacy_editor ) {
		return;
	}
	WPViews.ParametricButtons.text_search = new WPViews.ParametricTextSearchButton($);
	WPViews.ParametricButtons.submit = new WPViews.ParametricSubmitButton($);
	WPViews.ParametricButtons.reset = new WPViews.ParametricResetButton($);
	WPViews.ParametricButtons.spinner = new WPViews.ParametricSpinnerButton($);

	WPViews.ParametricButtons.generic = new WPViews.ParametricGenericButton($);
});

Page Not Found
Parece que el enlace que apuntaba aquí no sirve. ¿Quieres probar con una búsqueda?
¡Hola!